package com.example.demo;
import com.example.demo.component.UserComponent;
import com.example.demo.component.UserController;
import com.example.demo.model.UserInfo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class Springioc2Application {

	public static void main(String[] args) {
		//spring 容器
		ApplicationContext context = SpringApplication.run(Springioc2Application.class, args);
		UserComponent bean = context.getBean(UserComponent.class);//根据类型去拿
		System.out.println(bean);
//		bean.userInfo();
//		//也会调用 userService.sayHi(),如果 userService没有值,会报空指针异常
		UserController bean1 = context.getBean(UserController.class);
		System.out.println("bean1:" + bean1);
		bean1.sayHi(); //不是静态方法要有对象才能调用方法

//		UserService userSerive =  (UserService) context.getBean("s1");//名称唯一的  但,需要进行强转,写错了idea检测不到
//		System.out.println(userSerive);
//
//		UserService userSerive2 =  (UserService) context.getBean(UserService.class);//一个类型有多个bean就不行  ---数据库建datasource,一个应用程序用了多个datasource,用了多个数据库,那就有多个对象了
//		System.out.println(userSerive2);
//		//多次获取得到的同一个对象----单例模式
//		//spring管理的对象 默认是单例的
//
//
//		//双重保险~
//		UserService userSerive3 =  (UserService) context.getBean(UserService.class,"userService");//一个类型有多个bean就不行  ---数据库建datasource,一个应用程序用了多个datasource,用了多个数据库,那就有多个对象了
//		System.out.println(userSerive);
//
//		UserRepository userRepository = (UserRepository) context.getBean(UserRepository.class);
//		System.out.println(userRepository);
//
//		UserConfig userConfig = (UserConfig) context.getBean("config");
//		System.out.println(userConfig);

//		UserInfo userInfo = (UserInfo) context.getBean(UserInfo.class);
//		System.out.println(userInfo);

//		UserInfo userInfo = (UserInfo) context.getBean("userInfo2");
//		System.out.println(userInfo);


//		UserInfo userInfo =  context.getBean("u1",UserInfo.class);
//		System.out.println(userInfo);
//		UserInfo userInfo2 =  context.getBean("u2",UserInfo.class);
//		System.out.println(userInfo2);
	}

}
